package com.lijian.community.dto;

import lombok.Data;

import java.util.ArrayList;
import java.util.List;

@Data
public class PaginationDTO<T> {

    /**
     * 数据
     */
    private List<T> data;

    /**
     * 上一页按钮
     */
    private boolean showPrevious;

    /**
     * 下一页按钮
     */
    private boolean showNext;

    /**
     * 首页按钮
     */
    private boolean showFirstPage;

    /**
     * 尾页按钮
     */
    private boolean showEndPage;

    /**
     * 当前页
     */
    private Integer page;

    private List<Integer> pages = new ArrayList<>();

    private Integer totalPage;


    public void setPagination(Integer totalCount, Integer page, Integer size) {
        if (totalCount % size == 0) {
            totalPage = totalCount / size;
        } else {
            totalPage = totalCount / size + 1;
        }

        //页数不能小于1
        if (page < 1) {
            page = 1;
        }
        //页数不能大于最大页数
        if (page > totalPage) {
            page = totalPage;
        }

        this.page = page;

        pages.add(page);
        for (int i = 1; i <= 3; i++) {
            if (page - i > 0) {
                pages.add(0, page - i);
            }
            if (page + i <= totalPage) {
                pages.add(page + i);
            }
        }


        //是否展示上一页
        if (page == 1) {
            showPrevious = false;
        } else {
            showPrevious = true;
        }

        //是否展示下一页
        if (page == totalPage) {
            showNext = false;
        } else {
            showNext = true;
        }

        //是否展示首页
        if (pages.contains(1)) {
            showFirstPage = false;
        } else {
            showFirstPage = true;
        }

        //是否展示尾页
        if (pages.contains(totalPage)) {
            showEndPage = false;
        } else {
            showEndPage = true;
        }
    }
}
